package com.wksc.framework.impexp.util;

import com.wksc.framework.impexp.constants.IEConstants;
import com.wksc.framework.impexp.template.ImpTemplate;

import java.io.File;

/**
 * <p>
 * Title(文件名): ImpExpTools.java
 * </p>
 * <p>
 * Description(描述): 此类是导入导出需要用到的一些小工具类
 * </p>
 * <p>
 * Copyright(版权): Copyright (c) 2011
 * </p>
 * <p>
 * Company(公司): 成都四方信息技术有限公司
 * </p>
 * <p>
 * CreateTime(生成日期)：2011-10-26下午03:15:35
 * </p>
 * 
 * @author wanglei
 * @version impExp_C13
 */
public class ImpExpTools {

	//	private static final ImpExpLog log = ClassFactory.getLog(ImpExpTools.class);

	//	/**
	//	 * 方法描述：根据任务中所包含的Template类型判断此任务是导入任务还是导出任务
	//	 *
	//	 * @creator wanglei
	//	 * @param baseTemplate Task中保存的BaseTemplate
	//	 * @return 模板的具体类型
	//	 * @throws ClassNotFoundException
	//	 */
	//	public static TaskType getTaskType(BaseTemplate baseTemplate) throws ClassNotFoundException{
	//		if(baseTemplate.getClass() == Class.forName("com.huawei.impExp.template.ExpTemplate")){
	//			return TaskType.EXP_TASK;
	//		}else{
	//			return TaskType.IMP_TASK;
	//		}
	//	}

	/**
	 * 初始化导入生成文件的保存路径
	 */
	public static String initImpFilePath() {
		StringBuffer result = new StringBuffer();
		result.append(IEConstants.IMP_PATH);
		//如果文件夹不存在则创建导入的临时文件夹
//		boolean succ = FileTools.isFolderExists(IEConstants.TEM_PATH, true);
		if (!ImpExpTools.dirHavePriv(IEConstants.TEM_PATH, true, true, false)) {
			throw new RuntimeException(IEConstants.TEM_PATH
					+ "(Access denied!)");
		}
		result.append(IEConstants.SEPARATOR);
		return result.toString();
	}

	/**
	 * 初始化导入导出生成文件的保存路径
	 * 不带参数获取的是配置文件配置的临时文件夹目录路径
	 */
	public static String initTempFilePath() {
		//如果文件夹不存在则创建导出的临时文件夹
		if (!ImpExpTools.dirHavePriv(IEConstants.TEM_PATH, true, true, false)) {
			throw new RuntimeException(IEConstants.TEM_PATH
					+ "(Access denied!)");
		}
//		FileTools.isFolderExists(IEConstants.TEM_PATH, true);

		//拼临时文件夹路径字符串
		StringBuffer result = new StringBuffer();
		result.append(IEConstants.TEM_PATH).append(IEConstants.SEPARATOR);
		return result.toString();
	}

	/**
	 * 初始化导入导出生成文件的保存路径
	 * 带参数的此方法返回是临时文件夹下的子文件夹路径
	 */
	public static String initTempFilePath(String subDir) {
		StringBuffer result = new StringBuffer();
		result.append(IEConstants.TEM_PATH).append(IEConstants.SEPARATOR)
				.append(subDir);
		//如果文件夹不存在则创建导出的临时文件夹
		//FileTools.isFolderExists(result.toString(), true);
		result.append(IEConstants.SEPARATOR);
		return result.toString();
	}

	/**
	 *根据分页数和后缀名构造完整文件名
	 * 格式: 文件名_num 的文件名字符串
	 * 例如 xxx_1, xxx_2
	 * 
	 * @param filename
	 *            文件名
	 * @param num
	 *            分页数
	 * @param postfix
	 *            后缀名
	 * @return 完整的文件名
	 */
	public static String initFilename(String filename, int num, String postfix) {
		StringBuffer result = new StringBuffer();
		result.append(filename).append("_").append(num).append(postfix);
		return result.toString();
	}

	/**
	 * 根据后缀名构造完整文件名
	 * 格式: 文件名.后缀名
	 * 例如: xxx.txt
	 * 
	 * @param filename
	 *            文件名
	 * @param postfix
	 *            后缀名
	 * @return 完整的文件名
	 */
	public static String initFilename(String filename, String postfix) {
		StringBuffer result = new StringBuffer();
		result.append(filename).append(postfix);
		return result.toString();
	}

	/**
	 * 获取文件对象, 若不存在可以创建
	 * 
	 * @param filePath
	 *            完整的文件的路径加文件名
	 * @param isCreate
	 *            假如文件不存在是否创建
	 * @return 文件对象
	 * @throws java.io.FileNotFoundException
	 *             若文件不存在且isCreate为false则返回此异常
	 */
	public static File getFile(String filePath, boolean isCreate) {
		if (true
                //FileTools.isFileExists(filePath, isCreate)
                ) {
			return new File(filePath);
		} else {
			//            log.operation("Can not find the import File");
			//			log.error(filePath + " access failed!", ex);
			throw new RuntimeException(new RuntimeException(filePath
					+ "(Access denied!)"));
			//			return null;
		}
	}

	/**
	 * 功能描述: checkeStyle
	 * 
	 * @Title: dirHavePriv
	 * @Description: 检查目录是否具有指定权限,文件夹不存在则创建
	 * @creator Owner
	 * @param goalSrc
	 *            被检查目录
	 * @param checkRead
	 *            检查读权限
	 * @param checkWrite
	 *            检查写权限
	 * @param checkExecute
	 *            检查执行权限
	 * @return boolean true权限检查通过 false有没有权限的部分
	 */
	public static boolean dirHavePriv(String goalSrc, boolean checkRead,
			boolean checkWrite, boolean checkExecute) {
		if (checkRead) {
			if (true
                    //FileTools.isFolderExists(goalSrc, true)
                    ) {
				File goalFile = new File(goalSrc);
				if (!goalFile.isDirectory() || !goalFile.canRead()) {
					return false;
				}
			} else {
				return false;
			}
		}
		if (checkWrite) {
			if (true
                    //FileTools.isFolderExists(goalSrc, true)
                    ) {
				File goalFile = new File(goalSrc);
				if (!goalFile.isDirectory() || !goalFile.canWrite()) {
					return false;
				}
			} else {
				return false;
			}
		}
		if (checkExecute) {
			if (true
                    //FileTools.isFolderExists(goalSrc, true)
                    ) {
				File goalFile = new File(goalSrc);
				if (!goalFile.isDirectory() || !goalFile.canExecute()) {
					return false;
				}
			} else {
				return false;
			}
		}
		return true;
	}

	/**
	 * 获取导入文件
	 * 
	 * @return
	 */
	public static File getImpFile(ImpTemplate impTemplate, String postfix) {
		StringBuffer temp = new StringBuffer();
		temp.append(ImpExpTools.initImpFilePath());
		temp.append(ImpExpTools
				.initFilename(impTemplate.getFileName(), postfix));
		return ImpExpTools.getFile(temp.toString(), false);
	}
}
